<?php
require_once '../dlo/ClasseDLO.php';

class ClasseController {

    private $cod_classe;
    private $descricao;
    private $nome;
    private $cod_pai;
    private $row_id;
    private $campo_id;
    private $campo_valor;
    private $tipo_listagem;

    function __construct(&$cod_classe, &$descricao, &$nome, &$cod_pai, &$row_id, &$campo_id, &$campo_valor, &$tipo_listagem) {
        $this->cod_classe = &$cod_classe;
        $this->descricao = &$descricao;
        $this->nome = &$nome;
        $this->cod_pai = &$cod_pai;
        if ($cod_pai == '') {
            $this->cod_pai = null;
        }
        $this->row_id = &$row_id;
        $this->campo_id = &$campo_id;
        $this->campo_valor = &$campo_valor;
        $this->tipo_listagem = &$tipo_listagem;
    }

    public function cadastrar() {
        try {
            $dlo = &ClasseDLO::getInstance();
            $dlo->cadastrar($this->descricao, $this->nome, $this->cod_pai);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function alterar() {
        try {
            $dlo = &ClasseDLO::getInstance();
            $dlo->alterar($this->row_id, $this->campo_id, $this->campo_valor);
            echo $this->campo_valor;
        } catch (Exception $e) {
            if ($e->getMessage() != 'no_action') {
                echo "Exception: " . $e->getMessage();
            } else {
                echo $this->campo_valor;
            }
        }
    }

    public function excluir() {
        try {
            $dlo = &ClasseDLO::getInstance();
            $dlo->excluir($this->cod_classe);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    private function imprimirArvore(&$classe) {
        echo "<li id='" . $classe['cod_classe'] . "'>" . "<div><!--<a>" . $classe['codigo'] . "</a>--><a style='float : left' id='nome' title='" . $classe['descricao'] . "' class='title' onclick='$(\"#classe_pai_cadastrar\").html(\"" . $classe['nome'] . "\");$(\"#cod_pai_cadastrar\").val(\"" . $classe['cod_classe'] . "\")'>" . $classe['nome'] . '</a>
                <a href="javascript: void(0)" class="ui-icon ui-icon-trash" onclick="showConfirm(\'Confirma exclusão?\',function() {manutencaoClasse(\'excluir\',' . $classe["cod_classe"] . ');$(this).dialog(\'close\');})" title="Excluir"></a></div>';
        $filhos = &$classe['filhos'];
        if (count($filhos) > 0) {
            echo '<ul>';
            foreach ($filhos as $value) {
                $this->imprimirArvore($value);
            }
            echo '</ul>';
        }
        echo "</li>";
    }

    public function listar() {
        try {
            $dlo = &ClasseDLO::getInstance();
            if ($this->tipo_listagem == 'arvore') {
                $cod_pai = null;
                $result = &$dlo->listar($cod_pai);
?>
                <ul id="thesaurus">
    <?php
                foreach ($result as $value) {
                    $this->imprimirArvore($value);
                }
    ?>
            </ul>
<?php
            } elseif ($this->tipo_listagem == 'xml') {
                $lista = &$dlo->listarFolhas();
                $xml = new XMLWriter();
                $xml->openMemory();
                $xml->startDocument('1.0', 'UTF-8');
                $xml->startElement("lista");
                foreach ($lista as $classe) {
                    $xml->startElement("classe");
                    $xml->writeElement('cod_classe', $classe['cod_classe']);
                    $xml->writeElement('nome', $classe['nome']);
                    $xml->endElement();
                }
                $xml->endElement();
                header('Content-type: text/xml');
                print $xml->outputMemory(true);
            }
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function consultar() {
        $dlo = &ClasseDLO::getInstance();
        try {
            $row = &$dlo->consultar($this->cod_classe);
            $xml = new XMLWriter();
            $xml->openMemory();
            $xml->startDocument('1.0', 'UTF-8');
            $xml->startElement("classe");
            $xml->writeAttribute('cod_classe', $row['cod_classe']);
            $xml->writeAttribute("nome", $row['nome']);
            $xml->writeAttribute("descricao", $row['descricao']);
            $xml->writeAttribute("vinculado", $row['vinculado']);
            $xml->endElement();
            header('Content-type: text/xml');
            print $xml->outputMemory(true);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

}

$controller = new ClasseController($_POST['cod_classe'], $_POST['descricao'], $_POST['nome'], $_POST['cod_pai'], $_POST['row_id'], $_POST['campo_id'], $_POST['campo_valor'], $_POST['tipo_listagem']);
if ($_POST['acao'] == 'cadastrar') {
    $controller->cadastrar();
} elseif ($_POST['acao'] == 'alterar') {
    $controller->alterar();
} elseif ($_POST['acao'] == 'excluir') {
    $controller->excluir();
} elseif ($_POST['acao'] == 'listar') {
    $controller->listar();
} elseif ($_POST['acao'] == 'consultar') {
    $controller->consultar();
}
?>
